package com.moneytree.utils;

import java.util.List;

public class Page {
	private List<?> list;// 要返回的某一页的记录列表
	private Integer allRow;// 总记录数
	private Integer totalPage;// 总页数
	private Integer currentPage;// 当前页
	private Integer pageSize;// 每页记录数

	@SuppressWarnings("unused")
	private boolean isFirstPage;// 是否为第一页
	@SuppressWarnings("unused")
	private boolean isLastPage;// 是否为最后一页
	@SuppressWarnings("unused")
	private boolean hasPreviousPage;// 是否有前一页
	@SuppressWarnings("unused")
	private boolean hasNextPage;// 是否有下一页

	/**
	 * 以下判断页的信息，只需要getter方法（is方法）即可
	 */
	public boolean isFirstPage() {
		return currentPage == 1;// 如是当前页是第一页
	}
	
	// 如果当前页是最后一页
	public boolean isLastPage() {
		return currentPage == totalPage;
	}
	
	// 只要当前页不是第一页
	public boolean isHasPreviousPage() {
		return currentPage != 1;
	}

	// 只要当前不是最后一页
	public boolean isHasNextPage() {
		return currentPage != totalPage;
	}

	/**
	 * 初始化分页信息
	 */
	public void init() {
		this.isFirstPage = isFirstPage();
		this.isLastPage = isLastPage();
		this.hasPreviousPage = isHasPreviousPage();
		this.hasNextPage = isHasNextPage();
	}

	/***************************************************************************
	 * 
	 * 计算总页数，静态方法，供外部直接通过类名调用 pageSize 每页记录数 allRow 总记录数
	 * 
	 * @return 总页数
	 */
	public static int countTotalPage(final int pageSize, final int allRow) {
		int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow
				/ pageSize + 1;
		return totalPage;
	}

	/***************************************************************************
	 * 
	 * 计算当前页第一条元素的下标
	 * pageSize 每页记录数 currentPage 当前第几页
	 * @return 当前页开始记录号
	 */
	public static int countOffset(final int pageSize, final int currentPage) {
		final int offset = pageSize * (currentPage - 1);
		return offset;
	}

	/***************************************************************************
	 * 
	 * 计算当前页，若为0或者请求的URl中没有"?page=",则用1代替 page传入的参数（可能为空，即，则返回1）
	 * 
	 * @return 当前页
	 */
	public static int countCurrentPage(int page) {
		final int curPage = (page == 0 ? 1 : page);
		return curPage;
	}

	/**
	 * 分页处理
	 * 
	 * @param list
	 *            需要分页处理的集合
	 * @param page
	 *            当前页
	 * @param pageSize
	 *            每页尺寸
	 * @param allRow
	 *            总记录数
	 * @return pageBean对象
	 */
	public static Page toPage(List<?> list, int page, int pageSize, int allRow) {
		int totalPage = Page.countTotalPage(pageSize, allRow);
		final int currentPage = Page.countCurrentPage(page);
		Page pageBean = new Page();
		pageBean.setCurrentPage(currentPage);
		pageBean.setAllRow(allRow);
		pageBean.setTotalPage(totalPage);
		pageBean.setList(list);
		pageBean.init();
		return pageBean;
	}
	
	public List<?> getList() {
		return list;
	}

	public void setList(List<?> list) {
		this.list = list;
	}

	public Integer getAllRow() {
		return allRow;
	}

	public void setAllRow(Integer allRow) {
		this.allRow = allRow;
	}

	public Integer getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(Integer totalPage) {
		this.totalPage = totalPage;
	}

	public Integer getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(Integer currentPage) {
		this.currentPage = currentPage;
	}

	public Integer getPageSize() {
		return pageSize;
	}

	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}

}